Repository navigation
Conversation
…2799) generate only reads tracked files, so the test's files/ mirror appears once the test is committed; the core/ tree does not equal ds-bot/ + patches without it.
|
@Birfy review request for this tip — Read at the tip (REST This is a T1 change ( One review request for this tip only — I will not repeat it on this sha. |
Draw masked connector credentials in a bordered field wrapper
Fixes #2799
Owner: Dev-1
Written-by: Dev-1
Bot: Dev-1
Reviewer: Birfy
Risk tier: T1
Base: 5b8d980
Claim-Id: 42545a65305b47bd8345a1b3315e3d37
What changed
CredentialField(core/src/client/connectors.js) drew a masked credential as a bareMaskedInput.That component is the Secrets page's field and
.bt-secret-inputcarries no border, background or labelof its own — by design, because it is always placed inside a
.bt-q-fieldwrapper. The connector formsupplied no wrapper, so Feishu's app mode showed the App ID in a box and the App Secret as nothing but
the grey
Paste or type the keyplaceholder line under it: the form read as if only the App ID could befilled in, while the secret field did accept text.
The masked branch now renders the same
label.bt-q-field.bt-secret-fieldwrapper the Secrets page andthe gateway token field (
connectors.js:261) already use, so app mode draws an App Secret box beside theApp ID box, with the
App Secretaria-label it already carried. The webhook mode still asks for exactlyone field and now gets the border it was missing for the same reason. Nothing on the host side changes:
the declaration (
core/src/host/connectors.js:451) and thebody.credentials.app_secretread werealready correct.
docs/subsystems/core-client.mdrecords how a masked credential is drawn, and onechangelog fragment is added.
Red first — clean base, only the new test on the branch
The third test passes on the base because
filledalready required both credentials; that guard is keptso a future change to the wrapper cannot enable Connect early.
After the fix
Generated mirrors
npm --prefix core run buildrewrotecore/client.js;node scripts/ds-bot-patches.mjs generatethenwrote
patches/ds-bot/files/ (392 files)and all ten patch files. Against this base the change is exactlythree generated paths:
patches/ds-bot/0001-core-fixes.patch+7/−2 — thesrc/client/connectors.jshunkpatches/ds-bot/0008-client-bundle.patch1 line — the builtclient.jspatches/ds-bot/files/test/connectors-app-secret-field.test.js(new, 96 lines) — the mirror of the testgeneratereads only tracked files, so the test'sfiles/mirror appears after the test is committed;the second commit carries it.
checkanswers all three lines ok —ds-bot/ = Fei2411/DeepSeek-Bot@2b10c70 (tree 5834c00, v0.1.5),10 patches apply cleanly in order,core/ equals ds-bot/ + patches/ds-bot/—and
canonicalreportspatches/ds-bot/ is what generate writes (generate is a no-op).node core/scripts/build-client.mjs --checkis silent (exit 0).Ran
TZ=UTC npm run verify— exit 0: core# tests 3193 / # pass 3193, social 619, tree 143, timeline 161,workflow 528,
.github/scripts+ policy 673, interop 37, live-e2e 34, zero failures.node scripts/lint.mjs—Found 88 warnings and 0 errors(the warnings are onmaintoo).ARCH_DOCS_BASE=5b8d980f npm --prefix core run arch-docs—arch-docs: OK (8 changed file(s)).node .github/scripts/changelog.mjs check—22 fragment(s) in changelog.d/ are well formed.node scripts/ds-bot-patches.mjs generate/check/canonicaland the client build check as above.9f91970b(treecbb3fafa), eight files+207/−8; the pushed head is generated fromthat tree by the push helper.
Not run
index.jsorsrc/host/change (this is a client form only).npm run pack, typecheck and actionlint: not part ofnpm run verify.Checkpoint
{ "pr": 2802, "claim": "Dev-1", "issue": 2799, "summary": "CredentialField drew a masked credential as a bare MaskedInput, and that field's .bt-secret-input is unstyled because the Secrets page only puts it inside a bordered .bt-q-field wrapper. With no wrapper, Feishu's app mode showed the App Secret as a grey placeholder line under the App ID box, so the form read as App ID only. The masked branch now uses that same wrapper, so both app fields are boxes and Connect stays disabled until both have text; webhook mode keeps one field, now bordered. A client form test covers the wrapper, the one-field webhook mode and the Connect rule.", "files": ["core/src/client/connectors.js", "core/client.js", "core/test/connectors-app-secret-field.test.js", "docs/subsystems/core-client.md", "changelog.d/2799-connectors-app-secret-field.fixed.md", "patches/ds-bot/0001-core-fixes.patch", "patches/ds-bot/0008-client-bundle.patch", "patches/ds-bot/files/test/connectors-app-secret-field.test.js"], "checks": { "ran": "TZ=UTC npm run verify (exit 0); ds-bot-patches generate/check/canonical; ARCH_DOCS_BASE=5b8d980f npm --prefix core run arch-docs", "result": "green", "at": "181ba3fbeb58df5705638d2e657c6119c084c46f" }, "next": "none — ready for review" }